Cơ bản về Amazon Cognito
Khi xây dựng các ứng dụng website hay mobile, không thể không tính tới 1 yếu tố quan trọng mật thiết đó là quản lý người dùng. Kéo theo đó là những chức năng cơ bản thiết yếu như: Đăng nhập, đăng kí, xác thực đa yếu tố, ...
Amazon đã phát triển dịch vụ Amazon Cognito để giải quyết vấn đề này một cách đơn giản. Hãy cùng tìm hiểu về Amazon Cognito một cách cơ bản nhé.
1. Amazon Cognito là gì?
Amazon Cognito là dịch vụ của Amazon Web Services cung cấp xác thực, ủy quyền và quản lý người dùng cho các ứng dụng web và di động của bạn. Người dùng có thể đăng nhập trực tiếp bằng tên người dùng và mật khẩu hoặc thông qua bên thứ ba như Facebook, Amazon, Google hoặc Apple.
Amazon Cognito có thể mở rộng (scale) tới hàng triệu user và bạn chỉ phải trả tiền cho số lượng bạn sử dụng.
Với tiêu chí "Dành thời gian của bạn để tạo ra các ứng dụng tuyệt vời. Hãy để Amazon Cognito lo xử lý xác thực", Amazon Cognito mang tới những tính năng nổi trội sau:
- Thư mục người dùng bảo mật và có quy mô linh hoạt: Các tập hợp người dùng Amazon Cognito cung cấp một thư mục người dùng bảo mật có quy mô lên tới hàng trăm triệu người dùng. Là một dịch vụ được quản lý hoàn toàn, các Tập hợp người dùng có thể dễ dàng thiết lập mà không phải lo lắng về việc củng cố cơ sở hạ tầng máy chủ.
- Liên kết định danh mạng xã hội và doanh nghiệp: Với Amazon Cognito, người dùng có thể đăng nhập thông qua các nhà cung cấp định danh mạng xã hội như Google, Facebook và Amazon, cũng như các nhà cung cấp định danh doanh nghiệp như Microsoft Active Directory qua SAML.
- Xác thực dựa trên tiêu chuẩn: Tập hợp người dùng Amazon Cognito là Nhà cung cấp định danh dựa trên tiêu chuẩn và hỗ trợ các tiêu chuẩn quản lý định danh và truy cập như Oauth 2.0, SAML 2.0 và OpenID Connect.
- Bảo mật cho ứng dụng và người dùng: Amazon Cognito hỗ trợ xác thực đa yếu tố và mã hóa dữ liệu lưu trữ và dữ liệu truyền. Amazon Cognito đủ điều kiện theo HIPAA và tuân thủ PCI DSS, SOC, ISO/EIC 27001, ISO/EIC 27017, ISO/EIC 27018 và ISO 9001.
- Kiểm soát truy cập cho các tài nguyên AWS: Amazon Cognito cung cấp các giải pháp kiểm soát truy cập các tài nguyên phía back-end từ ứng dụng của bạn. Bạn có thể xác định các vai trò và ấn định người dùng vào các vai trò khác nhau để ứng dụng của bạn chỉ có thể truy cập vào các tài nguyên được cấp quyền cho mỗi người dùng.
- Tích hợp dễ dàng với ứng dụng của bạn: Với giao diện người dùng tích hợp sẵn và dễ dàng cấu hình nhà cung cấp định danh liên kết, chỉ trong vài phút bạn đã có thể tích hợp Amazon Cognito để thêm tính năng đăng nhập, đăng ký và kiểm soát truy cập người dùng vào ứng dụng. Bạn có thể tùy chỉnh giao diện người dùng để đặt bộ nhận diện thương hiệu của công ty bạn lên trước và vào giữa tất cả các tương tác người dùng.
Hai thành phần chính của Amazon Cognito là User pools and Identity pools:
- User pools là các thư mục người dùng cung cấp tùy chọn đăng ký và đăng nhập cho người dùng ứng dụng web và thiết bị di động của bạn.
- Identity pools cung cấp thông tin xác thực AWS để cấp cho người dùng của bạn quyền truy cập vào các dịch vụ AWS khác.
Có thể hiểu về chức năng 2 thành phần này thông qua hình mô tả sau:
Giao diện Amazon Cognito từ management console:
Tiếp theo, chúng ta sẽ tìm hiểu sâu hơn về 2 thành phần này.
2. User pools
User pools là các thư mục người dùng (User directories) cung cấp tùy chọn đăng ký và đăng nhập cho người dùng ứng dụng web và thiết bị di động của bạn.
Người dùng của bạn có thể đăng nhập vào web hoặc ứng dụng di động của bạn thông qua Amazon Cognito. Người dùng của bạn cũng có thể đăng nhập thông qua các nhà cung cấp nhận dạng xã hội như Google, Facebook, Amazon hoặc Apple và thông qua các nhà cung cấp nhận dạng SAML. Cho dù người dùng của bạn đăng nhập trực tiếp hoặc thông qua bên thứ ba, tất cả các thành viên của nhóm người dùng đều có hồ sơ thư mục mà bạn có thể truy cập thông qua Bộ công cụ phát triển phần mềm (SDK).
User pools cung cấp:
- Dịch vụ đăng ký và đăng nhập.
- Giao diện UI tích hợp, có thể tùy chỉnh, để đăng nhập người dùng.
- Đăng nhập bằng tài khoản Facebook, Google, Amazon, Apple, cũng như đăng nhập với các nhà cung cấp nhận dạng SAML
- Quản lý thư mục người dùng và hồ sơ người dùng.
- Các tính năng bảo mật như xác thực đa yếu tố (MFA), kiểm tra thông tin đăng nhập bị xâm phạm, bảo vệ quyền quản lý tài khoản, xác minh qua điện thoại và email.
- Workflow tùy chỉnh và migrate người dùng thông qua các AWS Lambda triggers.
Sau khi xác thực thành công người dùng, Amazon Cognito phát hành mã thông báo web JSON (JWT) mà bạn có thể sử dụng để bảo mật và ủy quyền truy cập vào API của riêng bạn hoặc trao đổi thông tin đăng nhập AWS.
Giao diện của mỗi User pools như sau
Có thể điểm qua một số thiệt lập quan trọng như sau
- Name: Tên User pools
- Attributes: Thiết lập các thuộc tính đăng nhập. Bạn có thể thiết lập các thông tin như Username, Email address, số điện thoại,...
- Policies: Thiết lập các điều kiện password
- MFA and verification: Quản lý xác thực đa yếu tố.
- Message customizations: Tuỳ chỉnh thiết lập email gửi tới người dùng.
- App clients: Đây chính là ứng dụng di động hay trang web sử dụng User pools của bạn
- Triggers: Bạn có thể tạo Lambda function và sau đó kích hoạt chức năng đó trong các hoạt động như đăng ký, xác nhận và đăng nhập (xác thực)
- Identity providers: Bạn có thể cho phép trang web, ứng dụng của bạn được đăng nhập từ Facebook, Google, Amazon, Apple,...
3. Identity Pools (Federated Identities)
Identity Pools (Federated Identities) cung cấp thông tin xác thực AWS để cấp cho người dùng của bạn quyền truy cập vào các dịch vụ AWS khác.
Với nhóm nhận dạng, bạn có thể có được thông tin xác thực AWS tạm thời, có giới hạn để truy cập các dịch vụ AWS khác. Nhóm nhận dạng Amazon Cognito hỗ trợ các nhà cung cấp nhận dạng sau:
- Các nhà cung cấp công cộng: Đăng nhập bằng Amazon (Identity Pools), Facebook (Nhóm nhận dạng), Google (Nhóm nhận dạng), Đăng nhập bằng Apple (Identity Pools).
- User pools của Amazon Cognito
- OpenID connect (Identity Pools)
- Nhà cung cấp nhận dạng SAML (Identity Pools)
- Danh tính xác thực dành cho nhà phát triển (Identity Pools)
Tại giao diện tạo mới Identity pool, chúng ta có thể thiết lập những thông tin như
- Unauthenticated identites (Nhận dạng không được xác thực)
- Authentication flow settings (Cài đặt luồng xác thực)
- Authentication providers (Nhà cung cấp xác thực)
Tiếp theo, để sử dụng Amazon Congnito Identity Pools, chúng ta phải chỉ định 1 hoặc nhiều IAM Role để quy định quyền truy cập tới tài nguyên AWS của bạn.
- Identity Pools xác định hai loại danh tính: xác thực và không xác thực. Mỗi người có thể được chỉ định vai trò riêng của họ trong IAM. Danh tính được xác thực thuộc về người dùng được xác thực bởi nhà cung cấp đăng nhập công cộng (nhóm người dùng Amazon Cognito, Facebook, Google, SAML hoặc bất kỳ Nhà cung cấp kết nối OpenID nào),... Trong khi danh tính không được xác thực thường thuộc về người dùng khách (guest users).
- Khi Amazon Cognito nhận được yêu cầu của người dùng, dịch vụ sẽ xác định xem yêu cầu đó được xác thực hay chưa được xác thực, xác định Role nào được liên kết với loại xác thực đó và sau đó sử dụng Policy được đính kèm với Role đó để đáp ứng yêu cầu.
- Best practice: xác định các policy tuân theo nguyên tắc cấp đặc quyền tối thiểu. Nói cách khác, các chính sách chỉ nên bao gồm các quyền mà người dùng yêu cầu để thực hiện các tác vụ của họ. Thông thường, các quyền mà bạn chỉ định cho danh tính không được xác thực sẽ bị hạn chế hơn so với các quyền đối với danh tính được xác thực.
Để sử dụng Identity Pools, bạn phải cài đặt và định cấu hình AWS Mobile hoặc JavaScript SDK
Identity Pools cung cấp thông tin xác thực AWS tạm thời cho người dùng là khách (chưa được xác thực) và cho người dùng đã xác thực và nhận token. Với những thông tin xác thực AWS đó, ứng dụng của bạn có thể truy cập một cách an toàn back end trong AWS hoặc bên ngoài AWS thông qua Amazon API Gateway.
Kết luận
Như vậy, chúng ta đã đi qua những khái niệm và chức năng cơ bản nhất về Amazon Cognito. Để tìm hiểu thêm, bạn có thể tham khảo thêm trên các nguồn chính thức từ Whitepaper hay Documents của Amazon.
Tham khảo: